home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / mac / hypercrd / hc2_x / regnpckg.sit / Picture Window ƒ / WDEF Dialog.c < prev    next >
Text File  |  1990-12-10  |  2KB  |  122 lines

  1. #define NIL ((void *)0)
  2.  
  3. /* resource numbers */
  4. #define DLOG_ID 1
  5. #define TEXT_ID 1
  6.  
  7. /* dialog item numbers */
  8. #define CONT 1
  9. #define QUIT 2
  10. #define TEXT 9
  11. #define SBAR 10
  12.  
  13. /* local globals */
  14. static TEHandle Te;
  15. static Rect Frame, TeRect;
  16. static int Height, Page;
  17. static ControlHandle Bar;
  18.  
  19. pascal void drawUser(wind, item)
  20. WindowPtr wind; int item;
  21. {    GrafPtr oldp;
  22.  
  23.     switch(item)
  24.     {    case TEXT:
  25.             GetPort(&oldp);
  26.             SetPort(wind);
  27.             
  28.             TEUpdate(&TeRect, Te);
  29.             FrameRect(&Frame);
  30.             
  31.             SetPort(oldp);
  32.             break;
  33.         case SBAR:
  34.             ShowControl(Bar);
  35.             break;
  36.         default:
  37.             ;
  38.     }
  39. }
  40.  
  41. pascal void track(ch, part)
  42. ControlHandle ch; int part;
  43. {    int scale, val;
  44.  
  45.     switch(part)
  46.     {    case inUpButton: scale = 1; break;
  47.         case inDownButton: scale = -1; break;
  48.         case inPageUp: scale = Page; break;
  49.         case inPageDown: scale = -Page; break;
  50.         default: scale = 0;
  51.     }
  52.     val = GetCtlValue(ch) - scale;
  53.     if(val >= GetCtlMin(ch) && val <= GetCtlMax(ch))
  54.     {    TEScroll(0, Height * scale, Te);
  55.         SetCtlValue(ch, val);
  56.     }
  57. }
  58.  
  59. int doDialog()
  60. {    DialogPtr dp;
  61.     Handle ig, th;
  62.     Rect r;
  63.     Point pt;
  64.     int type, item, start, end, part;
  65.     ControlHandle ch;
  66.     GrafPtr oldp;
  67.  
  68.     dp = GetNewDialog(DLOG_ID, NIL, (WindowPtr)-1);
  69.     GetDItem(dp, TEXT, &type, &ig, &TeRect);
  70.     SetDItem(dp, TEXT, type, (Handle)drawUser, &TeRect);
  71.  
  72.     GetPort(&oldp);
  73.     SetPort(dp);
  74.     Frame = TeRect;
  75.     InsetRect(&TeRect, 1, 1);
  76.     Te = TENew(&TeRect, &TeRect);
  77.     SetPort(oldp);
  78.  
  79.     th = GetResource('TEXT', TEXT_ID);
  80.     HLock(th);
  81.     TESetText(*th, GetHandleSize(th), Te);
  82.     ReleaseResource(th);
  83.  
  84.     Height = (*Te)->lineHeight;
  85.     Page = (TeRect.bottom - TeRect.top) / Height;
  86.     
  87.     GetDItem(dp, SBAR, &type, &ig, &r);
  88.     Bar = NewControl(dp, &r, "\p", false, 0, 0, (*Te)->nLines - Page, 16, 0);
  89.     SetDItem(dp, SBAR, type, (Handle)drawUser, &r);
  90.     
  91.     ShowWindow(dp);
  92.     
  93.     while(1)
  94.     {    ModalDialog(NIL, &item);
  95.         switch(item)
  96.         {    case SBAR:
  97.                 GetPort(&oldp);
  98.                 SetPort(dp);
  99.                 GetMouse(&pt);
  100.                 SetPort(oldp);
  101.                 if((part = TestControl(Bar, pt)) != 0)
  102.                 {    if(part == inThumb)
  103.                     {    start = GetCtlValue(Bar);
  104.                         TrackControl(Bar, pt, NIL);
  105.                         end = GetCtlValue(Bar);
  106.                         TEScroll(0, (start - end) * Height, Te);
  107.                     }
  108.                     else
  109.                         TrackControl(Bar, pt, track);
  110.                 }
  111.                 break;
  112.             case QUIT:
  113.             case CONT:
  114.                 TEDispose(Te);
  115.                 DisposDialog(dp);
  116.                 return(item == CONT);
  117.             default:
  118.                 ;
  119.         }
  120.     }
  121. }
  122.